package Alexico;
import java.util.HashMap;
/**
* Al crear objetos instancia de esta clase se crea un HashMap<b>&#60String,String></b>.
*Donde las llaves del HashMap son los lexemas validos en el lenguaje Minijava
*Para identificar un numero se debe preguntar por "num", y para obtener el nombre
* del token id, se debe preguntar por "0".
* @author Sayes Lucero, Alfredo Andrès Lu:66604
* @author Diego Ghilardi Lu: 51782
*/
public class palabrasEspeciales {
    private HashMap<String,String> tToken = new HashMap<String,String>();
    private HashMap<String,String> tPalabrasProhibidas = new HashMap<String,String>();

/**
*El constructor de la clase hace uso de un método privado para la creacion de
*toda la tToken y palabras prohibidas
*
*/
    public palabrasEspeciales() {
           cargarTablaToken();
           cargarTPalabrasProhibidas();
    }
    private void cargarTPalabrasProhibidas(){
            tPalabrasProhibidas.put("abstract","ABSTRACT");
            tPalabrasProhibidas.put("default","DEFAULT");
            tPalabrasProhibidas.put("long","LONG");
            tPalabrasProhibidas.put("switch","SWITCH");
            tPalabrasProhibidas.put("try","TRY");
            tPalabrasProhibidas.put("byte","BYTE");
            tPalabrasProhibidas.put("do","DO");
            tPalabrasProhibidas.put("implements","IMPLEMENTS");
            tPalabrasProhibidas.put("native","NATIVE");
            tPalabrasProhibidas.put("synchronized","SYNCHRONIZED");
            tPalabrasProhibidas.put("volatile","VOLATILE");
            tPalabrasProhibidas.put("case","CASE");
            tPalabrasProhibidas.put("double","DOUBLE");
            tPalabrasProhibidas.put("import","IMPORT");
            tPalabrasProhibidas.put("goto","GOTO");
            tPalabrasProhibidas.put("throw","THROW");
            tPalabrasProhibidas.put("final","FINAL");
            tPalabrasProhibidas.put("instanceof","INSTANCEOF");
            tPalabrasProhibidas.put("package","PACKAGE");
            tPalabrasProhibidas.put("throws","THROWS");
            tPalabrasProhibidas.put("const","CONST");
            tPalabrasProhibidas.put("finally","FINALLY");
            tPalabrasProhibidas.put("instance","INTERFACE");
            tPalabrasProhibidas.put("short","SHORT");
            tPalabrasProhibidas.put("transient","TRANSIENT");
            tPalabrasProhibidas.put("break","BREAK");
            tPalabrasProhibidas.put("continue","CONTINUE");
            tPalabrasProhibidas.put("private","PRIVATE");
            tPalabrasProhibidas.put("protected","PROTECTED");
            tPalabrasProhibidas.put("public","PUBLIC");
            tPalabrasProhibidas.put("static","STATIC");
            //**
            tPalabrasProhibidas.put("byvalue","BYVALUE");
            tPalabrasProhibidas.put("none","NONE");
            tPalabrasProhibidas.put("cast","CAST");
            tPalabrasProhibidas.put("operator","OPERATOR");
            tPalabrasProhibidas.put("future","FUTURE");
            tPalabrasProhibidas.put("outer","OUTER");
            tPalabrasProhibidas.put("generic","GENERIC");
            tPalabrasProhibidas.put("rest","REST");
            tPalabrasProhibidas.put("inner","INNER");
            tPalabrasProhibidas.put("var","VAR");
    }
    
    
    private void cargarTablaToken()
    {
        tToken.put("class","CLASS");
        tToken.put("extends","EXTENDS");
        tToken.put("super","SUPER");
        tToken.put("void","VOID");
        //tabla.put("public","PUBLIC");
        //tabla.put("protected","PROTECTED");
        //tabla.put("static","STATIC");
        tToken.put("this","THIS");
        tToken.put("new","NEW");
        tToken.put("boolean","BOOLEAN");
        tToken.put("int","INT");
        tToken.put("char","CHAR");//tipo char
        tToken.put("charLiteral","CHARLITERAL");
        tToken.put("if","IF");
        tToken.put("else","ELSE");
        tToken.put("while","WHILE");
        tToken.put("return","RETURN");
        tToken.put("num","NUM");
        tToken.put("stringLiteral","STRINGLITERAL");
        tToken.put("String","STRING");
        tToken.put("null","NULL");
        tToken.put("{","LLAVE_A");
        tToken.put("}","LLAVE_C");
        tToken.put("(","PARENT_A");
        tToken.put(")","PARENT_C");
        tToken.put(";","SEP");
        tToken.put("&&","AND");
        tToken.put("||","OR" );
        tToken.put("==","IGUAL");
        tToken.put("=","OP_ASIG");
        tToken.put("!","NOT");
        tToken.put("!=","DISTINTO");
        tToken.put("<","MENOR");
        tToken.put(">","MAYOR");
        tToken.put("<=","MENOR_IGUAL");
        tToken.put(">=","MAYOR_IGUAL");
        tToken.put("+","OP_SUMA");
        tToken.put("-", "OP_RESTA");
        tToken.put("*","OP_MULT");
        tToken.put("/","OP_DIV");
        tToken.put("%","OP_MOD");
        tToken.put(",","COMA");
        tToken.put(".","PUNTO");
        tToken.put("true","TRUE");
        tToken.put("false","FALSE");
        tToken.put("0","ID");
        //tToken.put("main","MAIN");
        tToken.put("for","FOR");
        tToken.put("classDef","CLASSDEF");
        tToken.put("$", "PESOS");
    }
/**
*Dado un lexema se consulta a la tToken la existencia de este lexema dentro
*de las llaves, de existir se retorna el nombre del Token corresponiente
*@param lexema se usara como llave de la busqueda
*@return String en caso de existir el nombre de token correspondiente al valor de
 * clave {@link lexema} se retorna dicho nombre, caso contrario retorna null
*/
 public String obtenerNomToken(String lexema)
    {
       
        String aux=tToken.get(lexema);
        return aux;
   }
 
 /**
*Dado un lexema se consulta a la tPalabrasProhibidas la existencia de este lexema dentro
*de las llaves, de existir se retorna el nombre de la palabra prohibida corresponiente
*@param lexema se usara como llave de la busqueda
*@return String en caso de existir el nombre de la palabra prohibida correspondiente al valor de
 * clave {@link lexema} se retorna dicho nombre, caso contrario retorna null
*/
   
    public String obtenerPalabraProhibida(String lexema)
    {
        String aux=tPalabrasProhibidas.get(lexema);
        return aux;
    }
 
}//clase
